package com.jy.wms.service;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.jy.wms.common.UUIDUtils;
import com.jy.wms.common.annotions.BaseServiceDescribe;
import com.jy.wms.common.base.BaseService;
import com.jy.wms.common.base.ServiceException;
import com.jy.wms.common.base.SucessException;
import com.jy.wms.dao.SysRoleMapper;
import com.jy.wms.pojo.SysRole;
import com.jy.wms.pojo.SysRoleFunction;
import com.jy.wms.pojo.SysRoleMenu;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Map;

/**
    * @ClassName: SysRoleService.java
    * @Description: TODO(这里用一句话描述这个类的作用)
    * @Author syh
    * @Date Tue Aug 29 16:22:53 CST 2017
    */

    @Service
    public class SysRoleService extends BaseService<SysRoleMapper,SysRole> {

    /**
     * 添加角色信息
     * @param entity   实体对象
     * @return int
     */
    @BaseServiceDescribe(moduleName = "角色管理", btnName = "新增角色")
    public void baseInsert(SysRole entity) throws ServiceException {
        Integer i = dao.baseInsert(entity);
        if (i > 0) {

        } else {
            throw new ServiceException("新增角色失败");
        }

    }

    /**
     * 分页查询
     *
     * @param entity   实体
     * @return Page<SysRole>
     */
    @BaseServiceDescribe(moduleName = "角色管理", btnName = "分页查询角色")
    public Page<SysRole> baseSelectPage(SysRole entity) throws ServiceException {
        try {
            PageHelper.startPage(entity.getPage(), entity.getRows());
            return (Page<SysRole>) dao.baseSelectPage(entity);
        } catch (Exception e) {
            throw new ServiceException("查询角色失败", e);
        }

    }

    /**
     * 修改查询（根据主键ID查询）
     *
     * @param id       主键ID
     * @return SysRole
     */
    public SysRole baseSelectByPrimaryKey(String id) {
        return dao.baseSelectByPrimaryKey(id);
    }

    /**
     * 修改 （匹配有值的字段）
     *
     * @param entity   主键ID列表
     * @return int
     */
    @BaseServiceDescribe(moduleName = "角色管理", btnName = "编辑角色")
    public void baseUpdateByPrimaryKeySelective(SysRole entity) throws ServiceException {
        Integer i = dao.baseUpdateByPrimaryKeySelective(entity);
        if (i > 0) {

        } else {
            throw new ServiceException("编辑角色失败");
        }
    }

    /**
     * //取授权编辑前的角色功能id集合
     *
     * @param id
     * @return
     */
    public List<String> getSysRoleFunctionById(String id) {
        return dao.getSysRoleFunctionById(id);
    }

    /**
     * 删除已有角色功能
     *
     * @param id
     * @param database
     * @return
     */
    public Integer deleteRoleFunction(String id, String database) {
        return dao.deleteRoleFunction(id);
    }

    /**
     * 删除已有角色菜单
     *
     * @param id
     * @param database
     * @return
     */
    public Integer deleteRoleMenu(String id, String database) {
        return dao.deleteRoleMenu(id);
    }
    /**
     * 查询功能所属菜单集合
     *
     * @param ids
     * @return
     */
    public List<SysRoleMenu> selectRoleMenu(List<String> ids) {
        return dao.selectRoleMenu(ids);
    }
    /**
     * 查询前台传来的所有菜单和功能集合
     *
     * @return
     */
    @BaseServiceDescribe(moduleName = "角色授权", btnName = "授权角色")
    public void getFunctionMenu(Map<String, Object> map) throws ServiceException, SucessException {
        List<SysRoleFunction> sysRoleFunction = dao.getFunctionMenu();
        String id = (String) map.get("id");
        Integer flagd =dao.deleteRoleFunction(id);//删除已有角色功能
        Integer flagd2=dao.deleteRoleMenu(id);//删除已有角色菜单
        SysRoleMenu sm = null;
        SysRoleFunction syn = null;
        Integer flaga = 0;
        List<String> list = (List<String>) map.get("ids");
        if(list.size()>0){
            for (int i = 0; i < sysRoleFunction.size(); i++) {
                for (int j = 0; j < list.size(); j++) {
                    if (sysRoleFunction.get(i).getGnid().equals(list.get(j).toString())) {
                        if (sysRoleFunction.get(i).getType().equals("0")) {
                            sm = new SysRoleMenu();
                            sm.setId(UUIDUtils.uuid());
                            sm.setJsid(id);
                            sm.setCdid(list.get(j).toString());
                            flaga=dao.addRoleMenu(sm);//保存角色菜单方法
                            if(flaga<0){
                                throw new ServiceException("授权角色菜单失败");
                            }

                        } else if (sysRoleFunction.get(i).getType().equals("1")) {
                            syn = new SysRoleFunction();
                            syn.setId(UUIDUtils.uuid());
                            syn.setJsid(id);
                            syn.setGnid(list.get(j).toString());
                            flaga=dao.addSysRoleFunction(syn);//保存新加的角色功能方法
                            if(flaga<0){
                                throw new ServiceException("授权角色功能失败");
                            }

                        }
                    }

                }
            }
            if (flaga > 0) {
                throw new SucessException("角色授权成功");
            } else {
                throw new ServiceException("角色授权失败");
            }
        }else{
            throw new SucessException("角色授权成功");
        }
    }


   //添加去重
   public SysRole searchAdd(String mc){
       return dao.searchAdd(mc);
   }
    public SysRole searchAdds(String mc, String id){
        return dao.searchAdds(mc,id);
    }
}
